Import('sdlEnv')
Import('options')
env = sdlEnv.Copy()

sourceFiles = [
    'KX_WorldIpoController.cpp',
    'KX_WorldInfo.cpp',
    'KX_VisibilityActuator.cpp',
    'KX_VertexProxy.cpp',
    'KX_TrackToActuator.cpp',
    'KX_TouchSensor.cpp',
    'KX_TouchEventManager.cpp',
    'KX_TimeLogger.cpp',
    'KX_TimeCategoryLogger.cpp',
    'KX_SoundActuator.cpp',
    'KX_SG_NodeRelationships.cpp',
    'KX_SG_BoneParentNodeRelationship.cpp',
    'KX_SceneActuator.cpp',
    'KX_Scene.cpp',
    'KX_ScalingInterpolator.cpp',
    'KX_ScalarInterpolator.cpp',
    'KX_SCA_ReplaceMeshActuator.cpp',
    'KX_SCA_EndObjectActuator.cpp',
    'KX_SCA_AddObjectActuator.cpp',
    'KX_RaySensor.cpp',
    'KX_RayEventManager.cpp',
    'KX_RayCast.cpp',
    'KX_RadarSensor.cpp',
    'KX_PyMath.cpp',
    'KX_PythonInit.cpp',
    'KX_PyConstraintBinding.cpp',
    'KX_PositionInterpolator.cpp',
    'KX_PolygonMaterial.cpp',
    'KX_PhysicsObjectWrapper.cpp',
    'KX_OrientationInterpolator.cpp',
    'KX_ObjectActuator.cpp',
    'KX_ObColorIpoSGController.cpp',
    'KX_NearSensor.cpp',
    'KX_MouseFocusSensor.cpp',
    'KX_MotionState.cpp',
    'KX_MeshProxy.cpp',
    'KX_LightIpoSGController.cpp',
    'KX_Light.cpp',
    'KX_KetsjiEngine.cpp',
    'KX_IpoActuator.cpp',
    'KX_IPO_SGController.cpp',
    'KX_IPhysicsController.cpp',
    'KX_GameObject.cpp',
    'KX_GameActuator.cpp',
    'KX_EmptyObject.cpp',
    'KX_ConvertPhysicsObjects.cpp',
    'KX_ConstraintWrapper.cpp',
    'KX_ConstraintActuator.cpp',
    'KX_CDActuator.cpp',
    'KX_CameraIpoSGController.cpp',
    'KX_CameraActuator.cpp',
    'KX_Camera.cpp',
    'KX_BulletPhysicsController.cpp',
]

USE_PHYSICS = env['USE_PHYSICS']
if USE_PHYSICS == 'solid':
    sourceFiles.append('KX_SumoPhysicsController.cpp')
    env.Append(CPPPATH=env['SOLID_INCLUDE'])
elif USE_PHYSICS == 'ode':
    sourceFiles.append('KX_OdePhysicsController.cpp')
    env.Append(CPPPATH=env['SOLID_INCLUDE'])
elif USE_PHYSICS == 'bullet':
    sourceFiles.append('KX_BulletPhysicsController.cpp')
    env.Append(CPPPATH=Flatten(
        env['BULLET_INCLUDE'] +
        env['SOLID_INCLUDE']
    ))

env.Append(CPPPATH=[
    '#source/kernel/gen_system',
    '#intern/string',
    '#intern/guardedalloc',
    '#source/gameengine/Rasterizer/RAS_OpenGLRasterizer',
    '#intern/bmfont',
    '#intern/SoundSystem',
    '#intern/SoundSystem/include',
    '#intern/SoundSystem/openal',
    '#intern/SoundSystem/dummy',
    '#intern/SoundSystem/intern',
    '#source/gameengine/Converter',
    '#source/gameengine/BlenderRoutines',
    '#source/blender/imbuf',
    '#intern/moto/include',
    '#source/gameengine/Ketsji',
    '#source/gameengine/Ketsji/KXNetwork',
    '#source/blender/blenlib',
    '#source/blender/blenkernel',
    '#source/blender',
    '#source/blender/include',
    '#source/blender/makesdna',
    '#source/blender/python',
    '#source/gameengine/Rasterizer',
    '#source/gameengine/GameLogic',
    '#source/gameengine/Expressions',
    '#source/gameengine/Network',
    '#source/gameengine/SceneGraph',
    '#source/gameengine/Physics/common',
    '#source/gameengine/Physics/Bullet',
    '#source/gameengine/Physics/BlOde',
    '#source/gameengine/Physics/Dummy',
    '#source/gameengine/Physics/Sumo',
    '#source/gameengine/Physics/Sumo/include',
    '#source/gameengine/Physics/Sumo/Fuzzics/include',
    '#source/gameengine/Network/LoopBackNetwork',
    '#source/blender/misc',
    '#source/blender/blenloader',
    '#extern/bullet/LinearMath',
    '#extern/bullet/Bullet'
])
env.Append(CPPPATH=Flatten(
    env['PYTHON_INCLUDE'] +
    env['SDL_INCLUDE'] +
    env['BULLET_INCLUDE']
))

CC = env['CC']
if CC in ('msvc', 'icc'):
    env.Append(
        CXXFLAGS=['/GR'],
        CCFLAGS=['/Ox'],
    )

env.Library(target='#$BUILD_DIR/lib/KX_ketsji', source=sourceFiles)
